home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Utilities / Converters / Convert_RTF / Source / MacToNeXTRTFText.m < prev    next >
Text File  |  1995-06-12  |  6KB  |  184 lines

  1. /***********************************************************************\
  2. character conversion class for Convert RTF which converts between Mac and NeXT rtf formats.
  3. Copyright (C) 1993 David John Burrowes
  4.  
  5. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version.
  6.  
  7. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
  8.  
  9. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  10.  
  11. The author, David John Burrowes, can be reached at:
  12.     davidjohn@kira.net.netcom.com
  13.     David John Burrowes
  14.     1926 Ivy #10
  15.     San Mateo, CA 94403-1367
  16. \***********************************************************************/
  17.  
  18. /*====================================================================
  19.  
  20. NOTE: You may find that text doesn't line up properly unless you use the New Century Schoolbook Roman typeface, since this was created with it.
  21.  
  22. INFORMATION:
  23.     This is $Revision: 1.9 $ of this file
  24.     It was last modified by $Author: death $ on $Date: 93/04/04 23:28:02 $
  25.      $Log:    MacToNeXTRTFText.m,v $
  26. Revision 1.9  93/04/04  23:28:02  death
  27. Sun Apr  4 23:28:02 PDT 1993
  28.  
  29. Revision 1.8  93/02/21  11:59:51  death
  30. Sun Feb 21 11:59:50 PST 1993
  31.  
  32. Revision 1.7  93/01/10  08:27:17  death
  33. Sun Jan 10 08:27:17 PST 1993
  34.  
  35. Revision 1.6  93/01/02  23:41:27  death
  36. Sat Jan  2 23:41:27 PST 1993
  37.  
  38. Revision 1.5  93/01/02  13:38:55  death
  39. Sat Jan  2 13:38:55 PST 1993
  40.  
  41. Revision 1.4  92/12/25  16:26:14  death
  42. Fri Dec 25 16:26:13 PST 1992
  43.  
  44. Revision 1.3  92/12/21  07:00:44  death
  45. Mon Dec 21 07:00:43 PST 1992
  46.  
  47. Revision 1.2  92/12/19  08:18:16  death
  48. Sat Dec 19 08:18:15 PST 1992
  49.  
  50. Revision 1.1  92/12/13  10:01:01  death
  51. Sun Dec 13 10:01:00 PST 1992
  52.  
  53. ====================================================================*/
  54.  
  55.  
  56. #import "MacToNeXTRTFText.h"
  57. #import <memory.h>    // for memcpy
  58. #include <strings.h>
  59.  
  60.  
  61. @implementation MacToNeXTRTFText
  62.  
  63.  
  64.  
  65.  
  66.  
  67. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  68. //    Routine:        ConvertCharacter:
  69. //    Parameters:    a character to be converted
  70. //    Returns:        the converted character
  71. //    Stores:        the character that we are returning.
  72. //    Description:
  73. //        This uses the ConvertArray set up in the initialization to convert
  74. //        a character from a Mac character set to a NeXT.  It allows for strict
  75. //        adherance to the table in Inside Mac vol 1. p. 221.  It returns the converted
  76. //        character and a result code based on its succes.
  77. //    Bugs:
  78. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  79. - (Character) ConvertCharacter: (Character) theCharacter
  80. {
  81.     Character    result;
  82.     Boolean        couldconvert = YES;
  83.     Boolean        usedSymbol = NO;
  84.     [self ResetResults];
  85.     //
  86.     //    Determine if we are doing 'strict inside mac vol 1 p. 221' conversions.
  87.     //    if so, and the character is undefind in IM, return character literally.
  88.     //
  89.     if ((theCharacter > 0xD8) && (StrictIM == YES))
  90.         result = theCharacter;
  91.     else
  92.     {
  93.         //
  94.         //    In general, look up our result in the conversion array.  if we get a
  95.         //    null back (and we don't didn't pass a null), indicate we could not
  96.         //    convet properly.
  97.         //
  98.         result = ConvertArray[theCharacter];
  99.         if ((result == NullCharacter) &&  (theCharacter != NullCharacter))
  100.         {
  101.             usedSymbol = YES;
  102.             switch (theCharacter)
  103.             {
  104.                 case 0xA1:            // (degree)
  105.                     result = 0xB0;
  106.                     break;
  107.                 case 0xAA:            // (trademarkserif)
  108.                     result = 0xD4;
  109.                     break;
  110.                 case 0xAD:            // (notequal)
  111.                     result = 0xB9;
  112.                     break;
  113.                 case 0xB0:            // (infinity)
  114.                     result = 0xA5;
  115.                     break;
  116.                 case 0xB2:            // (lessequal)
  117.                     result = 0xA3;
  118.                     break;
  119.                 case 0xB3:            // (greaterequal)
  120.                     result = 0xB3;
  121.                     break;
  122.                 case 0xB6:            // (partialdiff)
  123.                     result = 0xB6;
  124.                     break;
  125.                 case 0xB7:            // (summation)
  126.                     result = 0xE5;
  127.                     break;
  128.                 case 0xB8:            // (product) 
  129.                     result = 0xD5;
  130.                     break;
  131.                 case 0xB9:            // (pi)
  132.                     result = 0x70;
  133.                     break;
  134.                 case 0xBA:            // (integral)
  135.                     result = 0xF2;
  136.                     break;
  137.                 case 0xBD:            // (Omega)
  138.                     result = 0x57;
  139.                     break;
  140.                 case 0xC3:            // (radical)
  141.                     result = 0xd6;
  142.                     break;
  143.                 case 0xC5:            // (approxequal)
  144.                     result =0xBB;
  145.                     break;
  146.                 case 0xC6:            // (delta)
  147.                     result = 0x44;
  148.                     break;
  149.                 case 0xD7:            // (lozenge)
  150.                     result = 0xE0;
  151.                     break;
  152.                 case 0xD9:            // (Ydieresis)  (usually a picture in IM fonts)
  153.                 case 0x11:            // (commandsymbol)
  154.                 case 0x12:            // (check)
  155.                 case 0x13:            // (diamond)
  156.                 case 0x14:            // (apple)
  157.                 case 0xF0:            // (apple)
  158.                 default:
  159.                     result = theCharacter;
  160.                     couldconvert = NO;
  161.                     usedSymbol = NO;
  162.                     break;
  163.             }
  164.         }
  165.     }
  166.     //
  167.     //    Store the result, and return.
  168.     //
  169.     [self      PutCharacter: result Into: FIRST_RESULT];
  170.  
  171.     if (usedSymbol == YES)
  172.         [self    PutBoolean: YES Into: SECOND_RESULT];
  173.     else
  174.         [self    PutBoolean: NO Into: SECOND_RESULT];
  175.  
  176.     if (couldconvert == YES)
  177.         [self    StoreErrorCode: errOK AndText: "Character converted!"];
  178.     else
  179.         [self    StoreErrorCode: errCANTMAPTOONE AndText: "No equivalent standard NeXTSTEP character"];
  180.     return result;
  181. }
  182.  
  183. @end
  184.